home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 24 / AMIGAplus Sonderheft 24 (2000)(Falke)(DE)[!].iso / PublicDomain / Anwendungen / MT-RechnungIII / Rexx / WWLieferschein2.outrexx < prev    next >
Text File  |  1998-11-26  |  11KB  |  470 lines

  1. /*
  2. ** Druck-, Vorschau, Sichern des Lieferscheins mit Hilfe von WordWorth
  3. ** $VER: WWLieferschein2.outrexx V1.00 (26.11.98)
  4. */
  5.  
  6. PARSE ARG ARexxPort;
  7.  
  8. ADDRESS VALUE ARexxPort;
  9. OPTIONS RESULTS;
  10.  
  11. WWVorlage    = "WWDokumente/Lieferschein2.ww";
  12. WWDokument    = "t:Lieferschein2.ww";
  13. WWPort        = "WORDWORTH."
  14.  
  15. LF                    = '0a'x;                            /* Zeilenvorschub                */
  16.  
  17. Gefunden = 0;
  18. DO i = 1 TO 20 WHILE(Gefunden = 0)
  19.     IF show(ports, (WWPort || i)) THEN
  20.         DO;
  21.             Gefunden = 1;
  22.             WWPort = WWPort || i;
  23.         END;
  24. END;
  25.  
  26. IF Gefunden = 0 THEN
  27.     DO;
  28.         ES_TITLE                = "Warnung";
  29.         ES_TEXTFORMAT        = "WordWorth ist nicht aktiv, bitte starten sie dieses" || LF || "und versuchen Sie es erneut";
  30.         ES_GADGETFORMAT    = "Abbrechen";
  31.         EASY_REQUEST;
  32.         EXIT;
  33.     END;
  34.  
  35. /* Original WW-Dokument nach t: kopieren, um ein versehentliches überschreiben */
  36. /* dieser Vorlage zu verhindern */
  37. GET_REXXPATH;
  38. WWVorlage        = MTR_RESULT || WWVorlage;
  39. ADDRESS COMMAND "copy" WWVorlage WWDokument;
  40.  
  41. /* Oberfläche sperren */
  42. LOCKGUI;
  43.  
  44. /* Art ermitteln: 0 = Drucken, 1 = Vorschau, 2 = Speichern */
  45. PRINTSTATE;
  46. Druckart = MTR_RESULT;
  47.  
  48. Ende_Kennzeichen = 'N';
  49.  
  50. /* Suchen der zu druckenden Daten */
  51. GET_PREFS;
  52. PRINTFIND;
  53.  
  54. /* Neues Dokument öffnen */
  55. ADDRESS VALUE WWPort;
  56. NEW;
  57. WWPort = RESULT;
  58.  
  59. DO WHILE( MTR_RESULT > 0 & Ende_Kennzeichen = 'N');
  60.  
  61.     CALL DatenAufbereiten;
  62.     SELECT;
  63.         WHEN Druckart = 0 THEN    /* Drucken    */
  64.             DO;
  65.                 ADDRESS VALUE WWPort;
  66.                 PRINT;
  67.                 ADDRESS VALUE ARexxPort;
  68.                 MTSCREENTOFRONT;
  69.             END;
  70.         WHEN Druckart = 1 THEN    /* Vorschau    */
  71.             ADDRESS VALUE ARexxPort;
  72.         WHEN Druckart = 2 THEN    /* Sichern    */
  73.             DO;
  74.                 ADDRESS VALUE WWPort;
  75.                 SAVEAS;
  76.                 ADDRESS VALUE ARexxPort;
  77.                 MTSCREENTOFRONT;
  78.             END;
  79.         OTHERWISE
  80.             DO;
  81.                 ES_TITLE                = "Warnung";
  82.                 ES_TEXTFORMAT        = "Druckart wird nicht unterstützt!";
  83.                 ES_GADGETFORMAT    = "Ok";
  84.                 EASY_REQUEST;
  85.                 Ende_Kennzeichen    = 'J';
  86.             END;
  87.     END;
  88.  
  89.     PRINTFIND;
  90. END;
  91.  
  92. /* WordWorth-Datei aus t: wieder entfernen */
  93. ADDRESS COMMAND "delete" WWDokument;
  94.  
  95. /* Oberfläche wieder entsperren */
  96. ADDRESS VALUE ARexxPort;
  97. FREEGUI;
  98.  
  99. EXIT;
  100.  
  101. DatenAufbereiten:
  102.  
  103.     ADDRESS VALUE ARexxPort;
  104.  
  105.     IF OB.CONSIGNEE_NUMBER = 0 THEN
  106.         OB.CONSIGNEE_NUMBER = OB.INVOICEE_NUMBER;
  107.     IF PREFS.NUMBER_DIGITS > 0 THEN
  108.         DO;
  109.             ZW_Rechnung = RIGHT( (Copies("0",PREFS.NUMBER_DIGITS) || MTR_RESULT), PREFS.NUMBER_DIGITS );
  110.             IF OB.CONSIGNEE_NUMBER > 0 THEN
  111.                 ZW_Kunde = RIGHT( (Copies("0",PREFS.NUMBER_DIGITS) || OB.CONSIGNEE_NUMBER), PREFS.NUMBER_DIGITS );
  112.             ELSE
  113.                 ZW_Kunde = RIGHT( (Copies("0",PREFS.NUMBER_DIGITS) || OB.INVOICEE_NUMBER), PREFS.NUMBER_DIGITS );
  114.         END;
  115.     ELSE
  116.         DO;
  117.             ZW_Rechnung = MTR_RESULT;
  118.             IF OB.CONSIGNEE_NUMBER > 0 THEN
  119.                 ZW_Kunde = OB.CONSIGNEE_NUMBER;
  120.             ELSE
  121.                 ZW_Kunde = OB.INVOICEE_NUMBER;
  122.         END;
  123.     IF PREFS.CLIENT_CODE = 1 THEN
  124.         ZW_Kunde = OB.CONSIGNEE.CUSTOMER.CLIENT_CODE;
  125.  
  126.     FORMAT_DATE_LONG date(s);
  127.     PRINTDATE = MTR_RESULT;
  128.  
  129.     FORMAT_DATE_LONG OB.DATE_DELIVERY_NOTE;
  130.     DELIVERY_NOTE_DATE_LONG = MTR_RESULT;
  131.  
  132.     w = OB.CURRENCY_USED;
  133.     IF w < 2 THEN
  134.         FORMAT_MONEY1 OB.TOTAL_M_ALL_CH.w;
  135.     ELSE
  136.         FORMAT_MONEY2 OB.TOTAL_M_ALL_CH.w;
  137.     ZW_Betrag    = MTR_RESULT;
  138.  
  139.     IF w < 2 THEN
  140.         FORMAT_MONEY1 OB.DISPATCH_COSTS.w;
  141.     ELSE
  142.         FORMAT_MONEY2 OB.DISPATCH_COSTS.w;
  143.     ZW_Versand    = MTR_RESULT;
  144.  
  145.     FORMAT_NUMBER OB.DISCOUNT_PERCENT PREFS.FRAC_DIGITS_PERCENT;
  146.     DISP    = MTR_RESULT;
  147.  
  148.     IF w < 2 THEN
  149.         FORMAT_MONEY1 OB.DISCOUNT.w;
  150.     ELSE
  151.         FORMAT_MONEY2 OB.DISCOUNT.w;
  152.     DIS    = MTR_RESULT;
  153.  
  154.     IF w < 2 THEN
  155.         FORMAT_MONEY1 OB.TOTAL_M_ALL_CH.0;
  156.     ELSE
  157.         FORMAT_MONEY2 OB.TOTAL_M_ALL_CH.2;
  158.     SUM_NET        = MTR_RESULT;
  159.  
  160.     IF w < 2 THEN
  161.         FORMAT_MONEY1 OB.TOTAL_M_ALL_CH.1;
  162.     ELSE
  163.         FORMAT_MONEY2 OB.TOTAL_M_ALL_CH.3;
  164.     SUM_GROSS    = MTR_RESULT;
  165.  
  166.  
  167.     ADDRESS VALUE WWPort;
  168.     OPEN FILENAME WWDokument FORCE;
  169.  
  170.     DruckString    = OB.OFFICE.ADDRESS.ADDRESS.2 || LF;
  171.     i = INDEX( DruckString, LF);
  172.     IF i > 0 THEN
  173.         DO;
  174.             DruckTeil    = LEFT( DruckString, (i - 1) );
  175.             DruckString = SUBSTR(DruckString, (i + 1) );
  176.             i = INDEX( DruckString, LF);
  177.         END;
  178.     ELSE
  179.         DruckTeil    = DruckString;
  180.     FINDCHANGE FIND "<OFFICE.ADDRESS.ADDRESS.2>" CHANGE DruckTeil;
  181.     DO WHILE( i > 0 );
  182.         DruckTeil    = LEFT( DruckString, (i - 1) );
  183.         DruckString = SUBSTR(DruckString, (i + 1) );
  184.         LINE 1;
  185.         TEXT DruckTeil;
  186.         i = INDEX( DruckString, LF);
  187.     END;
  188.  
  189.     POSITION SOF;
  190.     FINDCHANGE FIND "<PRINTDATE>" CHANGE PRINTDATE;
  191.     /* Leider wird bei längeren Texten der hintere Teil verschluckt, also nochmal ausgeben */
  192.     TEXT PRINTDATE;
  193.  
  194.     POSITION SOF;
  195.     FINDCHANGE FIND "<OFFICE.ADDRESS.ADDRESS.0>" CHANGE OB.OFFICE.ADDRESS.ADDRESS.0;
  196.     /* Leider wird bei längeren Texten der hintere Teil verschluckt, also nochmal ausgeben */
  197.     TEXT OB.OFFICE.ADDRESS.ADDRESS.0;
  198.  
  199.     POSITION SOF;
  200.     DruckString    = OB.CONSIGNEE.CUSTOMER.ADDRESS.ADDRESS.2 || LF;
  201.     i = INDEX( DruckString, LF);
  202.     IF i > 0 THEN
  203.         DO;
  204.             DruckTeil    = LEFT( DruckString, (i - 1) );
  205.             DruckString = SUBSTR(DruckString, (i + 1) );
  206.             i = INDEX( DruckString, LF);
  207.         END;
  208.     ELSE
  209.         DruckTeil    = DruckString;
  210.     FINDCHANGE FIND "<CUSTOMER.ADDRESS.ADDRESS.2>" CHANGE DruckTeil;
  211.     DO WHILE( i > 0 );
  212.         DruckTeil    = LEFT( DruckString, (i - 1) );
  213.         DruckString = SUBSTR(DruckString, (i + 1) );
  214.         LINE 1;
  215.         TEXT DruckTeil;
  216.         i = INDEX( DruckString, LF);
  217.     END;
  218.  
  219.     FINDCHANGE FIND "<OB.CONSIGNEE_NUMBER>" CHANGE ZW_Kunde;
  220.     FINDCHANGE FIND "<OB.NUMBER>" CHANGE ZW_Rechnung;
  221.  
  222.     FINDCHANGE FIND "<OB.DATE_DELIVERY_NOTE>" CHANGE DELIVERY_NOTE_DATE_LONG;
  223.     /* Leider wird bei längeren Texten der hintere Teil verschluckt, also nochmal ausgeben */
  224.     TEXT DELIVERY_NOTE_DATE_LONG;
  225.  
  226.     FINDCHANGE FIND "<OB.EMPLOYEE.SUR_PRENAME>" CHANGE (OB.EMPLOYEE.ADDRESS.PRENAME OB.EMPLOYEE.ADDRESS.SURNAME);
  227.  
  228.     FIND "<ARTICLE>";
  229.     BACKSPACE;
  230.  
  231.     DO i = 1 to OB.COUNT_ARTICLE;
  232.  
  233.         ADDRESS VALUE ARexxPort;
  234.  
  235.         ZW_ArtikelNr    = OB.i.POS_ARTICLE_NUMBER_FORMATED;
  236.  
  237.         FORMAT_NUMBER (OB.i.POS_QUANTITY / OB.i.POS_PRICE_UNIT) PREFS.FRAC_DIGITS;
  238.         ZW_Anzahl        = MTR_RESULT;
  239.  
  240.         NAME_OF_QUANTITY_UNIT OB.i.ARTICLE.QUANTITY_UNIT;
  241.         ZW_Einheit        = MTR_RESULT;
  242.  
  243.         j = OB.i.POS_VALUE;
  244.         FORMAT_NUMBER OB.VALUE_PERCENT.j PREFS.FRAC_DIGITS_PERCENT;
  245.         ZW_MWSt            = MTR_RESULT;
  246.  
  247.         ZW_Bezeichnung = OB.i.ARTICLE.DESCRIPTION;
  248.  
  249.         IF w < 2 THEN
  250.             FORMAT_MONEY1 OB.i.POS_SINGLE_PRICE.w;
  251.         ELSE
  252.             FORMAT_MONEY2 OB.i.POS_SINGLE_PRICE.w;
  253.         ZW_EinzelPreis    = MTR_RESULT;
  254.         
  255.         ADDRESS VALUE WWPort;
  256.  
  257.         TEXT ZW_ArtikelNr || "    " || ZW_Anzahl || "    " || ZW_Bezeichnung || "    " || ZW_Einheit || "    " || ZW_MWSt || "    " || ZW_EinzelPreis;
  258.  
  259.         IF OB.i.ARTICLE.ADDITIONAL_TEXT > "" THEN
  260.             DO;
  261.                 DruckString    = OB.i.ARTICLE.ADDITIONAL_TEXT || LF;
  262.                 i2 = INDEX( DruckString, LF);
  263.                 DO WHILE( i2 > 0 );
  264.                     DruckTeil    = LEFT( DruckString, (i2 - 1) );
  265.                     DruckString = SUBSTR(DruckString, (i2 + 1) );
  266.                     LINE 1;
  267.                     TEXT "        " || DruckTeil || "            ";
  268.                     i2 = INDEX( DruckString, LF);
  269.                 END;
  270.             END;
  271.  
  272.         IF OB.i.POS_REMARK > "" THEN
  273.             DO;
  274.                 DruckString    = OB.i.POS_REMARK || LF;
  275.                 i2 = INDEX( DruckString, LF);
  276.                 DO WHILE( i2 > 0 );
  277.                     DruckTeil    = LEFT( DruckString, (i2 - 1) );
  278.                     DruckString = SUBSTR(DruckString, (i2 + 1) );
  279.                     LINE 1;
  280.                     TEXT "        " || DruckTeil || "            ";
  281.                     i2 = INDEX( DruckString, LF);
  282.                 END;
  283.             END;
  284.  
  285.         DO i2 = 0 TO 2;
  286.             IF OB.i.POS_ADD_RED_USED.i2 > 0 THEN
  287.                 DO;
  288.                     ADDRESS VALUE ARexxPort;
  289.  
  290.                     j2 = OB.i.POS_ADD_RED_USED.i2 - 1;
  291.                     IF OB.i.POS_ADD_RED_TYPE.i2 = 0 | OB.i.POS_ADD_RED_TYPE.i2 = 5 THEN
  292.                         DO;
  293.                             FORMAT_NUMBER OB.i.POS_ADD_RED_VALUE.i2.w PREFS.FRAC_DIGITS_PERCENT;
  294.                         END;
  295.                     ELSE
  296.                         DO;
  297.                             IF w < 2 THEN
  298.                                 FORMAT_MONEY1 OB.i.POS_ADD_RED_VALUE.i2.w;
  299.                             ELSE
  300.                                 FORMAT_MONEY2 OB.i.POS_ADD_RED_VALUE.i2.w;
  301.                         END;
  302.                     ZW_EinzelZuAb    = RIGHT(MTR_RESULT, 15);
  303.  
  304.                     IF w < 2 THEN
  305.                         FORMAT_MONEY1 OB.i.POS_ADD_RED_VALUE_POS.i2.w;
  306.                     ELSE
  307.                         FORMAT_MONEY2 OB.i.POS_ADD_RED_VALUE_POS.i2.w;
  308.                     ZW_PosZuAb        = RIGHT(MTR_RESULT, 15);
  309.  
  310.                     ADDRESS VALUE WWPort;
  311.                     LINE 1;
  312.                     TEXT "        " || PREFS.ADD_RED_TEXT.j2 || "        " || ZW_EinzelZuAb || "    " || ZW_PosZuAb;
  313.                 END;
  314.         END;
  315.  
  316.         ADDRESS VALUE ARexxPort;
  317.  
  318.         IF w < 2 THEN
  319.             FORMAT_MONEY1 OB.i.POS_SUM_M_ALL.w;
  320.         ELSE
  321.             FORMAT_MONEY2 OB.i.POS_SUM_M_ALL.w;
  322.         ZW_PosPreis        = MTR_RESULT;
  323.  
  324.         ADDRESS VALUE WWPort;
  325.         TEXT "    " || ZW_PosPreis;
  326.         LINE 1;
  327.     END;
  328.  
  329.     FIND "<DESCRIPTION>";
  330.     j2 = 0;
  331.     IF OB.REMARK > "" THEN
  332.         DO;
  333.             DruckString    = OB.REMARK || LF;
  334.             i